{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a50b59ef-51d5-4c14-8a8a-55836f3bd1dd",
   "metadata": {},
   "source": [
    "Chapter 18\n",
    "# 将有向图转换为邻接矩阵\n",
    "Book_6《数据有道》 | 鸢尾花书：从加减乘除到机器学习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "24cdaf05-5567-4b87-b232-ae82a9abff83",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import networkx as nx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "5f2ecd59-f6c8-4a23-bcdb-dc3c73b727b6",
   "metadata": {},
   "outputs": [],
   "source": [
    "directed_G = nx.DiGraph()\n",
    "# 创建有向图的实例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4ed86243-583b-4d8e-931c-b3b47ed09203",
   "metadata": {},
   "outputs": [],
   "source": [
    "directed_G.add_nodes_from(['a', 'b', 'c', 'd'])\n",
    "# 添加多个顶点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "fdde0032-d5ba-4993-8235-97d806cd7e9a",
   "metadata": {},
   "outputs": [],
   "source": [
    "directed_G.add_edges_from([('b','a'),\n",
    "                           ('c','b'),\n",
    "                           ('b','d'), \n",
    "                           ('d','c'),\n",
    "                           ('a','c')])\n",
    "# 增加一组有向边"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4bb4c143-66fd-448a-9edd-feaf035d61e3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (6,6))\n",
    "nx.draw_networkx(directed_G, \n",
    "                 node_size = 180)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "1a1319c4-8551-402b-842b-7dd3ab432145",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\james\\AppData\\Local\\Temp\\ipykernel_10796\\2195789852.py:1: FutureWarning: adjacency_matrix will return a scipy.sparse array instead of a matrix in Networkx 3.0.\n",
      "  adjacency_matrix = nx.adjacency_matrix(directed_G).todense()\n"
     ]
    }
   ],
   "source": [
    "adjacency_matrix = nx.adjacency_matrix(directed_G).todense()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "d893fa39-4bcc-4803-bbd9-1c9738d22600",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[0, 0, 1, 0],\n",
       "        [1, 0, 0, 1],\n",
       "        [0, 1, 0, 0],\n",
       "        [0, 0, 1, 0]], dtype=int32)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "adjacency_matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a5f8cd72-edd9-4687-a1d1-d74c9ddc8d2c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[0., 0., 1., 0.],\n",
       "        [1., 0., 0., 1.],\n",
       "        [0., 1., 0., 0.],\n",
       "        [0., 0., 1., 0.]])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nx.to_numpy_matrix(directed_G)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "ccdb50d6-17f9-46df-aa60-eca6e2bf93d3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "InDegreeView({'a': 1, 'b': 1, 'c': 2, 'd': 1})"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "directed_G.in_degree()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "bf88a6ce-b084-4007-a844-b88a14dcfe15",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OutDegreeView({'a': 1, 'b': 2, 'c': 1, 'd': 1})"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "directed_G.out_degree()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
